#include <iostream>

//单例分两种
//懒汉式:对象在调用时进行构建
//饿汉式:程序开始时就构建


//懒汉式
// class Singleton
// {
// public:
//     static Singleton* getinstance()
//     {
//         if(instance == nullptr)
//         {
//             instance = new Singleton;
//         }
//         return instance;
//     }

//     // static void release()
//     // {
//     //     delete instance;
//     //     instance = nullptr;
//     // }
// private:
//     Singleton(){}
//     static Singleton *instance;
// };

// Singleton *Singleton::instance = nullptr;

// int main()
// {
//     auto obj = Singleton::getinstance();
//     return 0;
// }


//饿汉式
// class Singleton
// {
// public:
//     static Singleton* getinstance()
//     {
//         return instance;
//     }

// private:
//     Singleton(){}
//     static Singleton *instance;
// };

// Singleton *Singleton::instance = new Singleton;

// int main()
// {
//     auto obj = Singleton::getinstance();
//     return 0;
// }



class Singleton
{
public:
    static Singleton* getinstance()
    {
        static Singleton instance;
        return &instance;
    }

private:
    Singleton(){}
};

int main()
{
    auto obj = Singleton::getinstance();
    return 0;
}